import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class RomanToInteger {
    /*
    罗马数字包含以下七种字符:I，V，X，L，C，D和M。
    字符          数值
    I             1
    V             5
    X             10
    L             50
    C             100
    D             500
    M             1000
    例如，罗马数字 2 写做II，即为两个并列的 1 。12 写做XII，即为X+II。 2
    通常情况下，罗马数字中小的数字在大的数字的右边。但也存在特例，
    例如 4 不写做IIII，而是IV。数字 1 在数字 5 的左边，所表示的数等于大数 5 减小数 1 得到的数值 4 。
    同样地，数字 9 表示为IX。这个特殊的规则只适用于以下六种情况：
    I可以放在V(5) 和X(10) 的左边，来表示 4 和 9。
    X可以放在L(50) 和C(100) 的左边，来表示 40 和90。
    C可以放在D(500) 和M(1000) 的左边，来表示400 和900。
    给定一个罗马数字，将其转换成整数。
    链接：https://leetcode-cn.com/problems/roman-to-integer
     */
    
    public static int romanToInt(String s) {
        Map<String ,Integer> map = new HashMap<>();
        map.put("I",1);
        map.put("V",5);
        map.put("X",10);
        map.put("L",50);
        map.put("C",100);
        map.put("D",500);
        map.put("M",1000);
        map.put("IV",4);
        map.put("IX",9);
        map.put("XL",40);
        map.put("XC",90);
        map.put("CD",400);
        map.put("CM",900);
        char[] chars = s.toCharArray();
        if (chars.length ==1){

            return map.get(""+chars[0]);
        }

        int sum = 0;

        for (int i=0;i<chars.length;i++)
        {


            if((i+1)<chars.length && map.get(""+chars[i])<map.get(""+chars[i+1]) ){
                sum += map.get(""+chars[i]+chars[i+1]);
                i++;
            }else {
                sum += map.get(""+chars[i]);
            }



        }
        return sum;
    }
    public static void main(String[] args) {
        Scanner scanner =new Scanner(System.in);
        String roman = scanner.next();
        System.out.printf("输入的罗马数是%s\n",roman);
        System.out.printf("转换而来的整数是%d",romanToInt(roman));

    }
}
